From f5063c14357b2206c895e297ce855ac8363322e5 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 17 Oct 2022 15:10:51 -0400 Subject: [PATCH] window: Don't focus invisible widgets Only clear a queued move_focus if the widget we are focusing is actually visible. This was happening in some cases when popovers are dismissed by clicking outside, and it was causing us to miss proper focus updates that were already queued. --- gtk/gtkwindow.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index ff16a68104..1de17f9048 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -2004,7 +2004,9 @@ gtk_window_root_set_focus (GtkRoot *root, if (focus == priv->focus_widget) { - priv->move_focus = FALSE; + if (priv->move_focus && + focus && gtk_widget_is_visible (focus)) + priv->move_focus = FALSE; return; } @@ -2024,7 +2026,9 @@ gtk_window_root_set_focus (GtkRoot *root, g_clear_object (&old_focus); - priv->move_focus = FALSE; + if (priv->move_focus && + focus && gtk_widget_is_visible (focus)) + priv->move_focus = FALSE; g_object_notify (G_OBJECT (self), "focus-widget"); } @@ -4689,7 +4693,7 @@ maybe_unset_focus_and_default (GtkWindow *window) break; } - parent = _gtk_widget_get_parent (parent); + parent = _gtk_widget_get_parent (parent); } } -- 2.30.2